//238.除自身以外数组的乘积

#include<iostream>
#include<vector>
using namespace std;

vector<int> productExceptSelf(vector<int>& nums){
    //预处理前缀积数组
    //f[i]表示[0,i-1]之间的乘积
    vector<int> f(nums.size() + 1);
    //第一个特殊处理为1
    f[0] = 1;
    for (int i = 1; i < nums.size();i++){
        f[i] = f[i - 1] * nums[i - 1];
    }

    //预处理后缀和数组
    //g[i]表示[i+1,n-1]之间的乘积
    vector<int> g(nums.size() + 1);
    //最后一个特殊处理为1
    g[nums.size() - 1] = 1;
    for (int i = nums.size() - 2;i>=0;i--){
        g[i] = g[i + 1] * nums[i + 1];
    }

    vector<int> ret;
    for(int i=0;i<nums.size();i++){
        ret.push_back(f[i] * g[i]);
    }

    return ret;
}

int main(){
    vector<int> nums = {};

    vector<int> ret = productExceptSelf(nums);

    for(auto e : ret){
        cout << e << " ";
    }
    cout << endl;
    return 0;
}